home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Menus.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  12KB  |  374 lines

  1. /*
  2.      File:        Menus.h
  3.  
  4.      Contains:    Menu Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __MENUS__
  19. #define __MENUS__
  20.  
  21. #ifndef __MEMORY__
  22. #include <Memory.h>
  23. #endif
  24. #ifndef __QUICKDRAW__
  25. #include <Quickdraw.h>
  26. #endif
  27.  
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31.  
  32. #if PRAGMA_IMPORT_SUPPORTED
  33. #pragma import on
  34. #endif
  35.  
  36. #if PRAGMA_ALIGN_SUPPORTED
  37. #pragma options align=mac68k
  38. #endif
  39.  
  40. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  41.  
  42. enum {
  43.     noMark                        = 0,                            /*mark symbol for MarkItem*/
  44.                                                                 /* menu defProc messages */
  45.     mDrawMsg                    = 0,
  46.     mChooseMsg                    = 1,
  47.     mSizeMsg                    = 2,
  48.     mDrawItemMsg                = 4,
  49.     mCalcItemMsg                = 5,
  50.     textMenuProc                = 0,
  51.     hMenuCmd                    = 27,                            /*itemCmd == 0x001B ==> hierarchical menu*/
  52.     hierMenu                    = -1,                            /*a hierarchical menu - for InsertMenu call*/
  53.     mPopUpMsg                    = 3,                            /*menu defProc messages - place yourself*/
  54.     mctAllItems                    = -98,                            /*search for all Items for the given ID*/
  55.     mctLastIDIndic                = -99                            /*last color table entry has this in ID field*/
  56. };
  57.  
  58. struct MenuInfo {
  59.     short                             menuID;
  60.     short                             menuWidth;
  61.     short                             menuHeight;
  62.     Handle                             menuProc;
  63.     long                             enableFlags;
  64.     Str255                             menuData;
  65. };
  66. typedef struct MenuInfo MenuInfo;
  67.  
  68. typedef MenuInfo *MenuPtr;
  69. typedef MenuPtr *MenuHandle;
  70. typedef MenuHandle MenuRef;
  71. struct MCEntry {
  72.     short                             mctID;                        /*menu ID.  ID = 0 is the menu bar*/
  73.     short                             mctItem;                    /*menu Item. Item = 0 is a title*/
  74.     RGBColor                         mctRGB1;                    /*usage depends on ID and Item*/
  75.     RGBColor                         mctRGB2;                    /*usage depends on ID and Item*/
  76.     RGBColor                         mctRGB3;                    /*usage depends on ID and Item*/
  77.     RGBColor                         mctRGB4;                    /*usage depends on ID and Item*/
  78.     short                             mctReserved;                /*reserved for internal use*/
  79. };
  80. typedef struct MCEntry MCEntry;
  81.  
  82. typedef MCEntry *MCEntryPtr;
  83. typedef MCEntry MCTable[1];
  84. typedef MCEntry *MCTablePtr;
  85. typedef MCTablePtr *MCTableHandle;
  86. struct MenuCRsrc {
  87.     short                             numEntries;                    /*number of entries*/
  88.     MCTable                         mcEntryRecs;                /*ARRAY [1..numEntries] of MCEntry*/
  89. };
  90. typedef struct MenuCRsrc MenuCRsrc;
  91.  
  92. typedef MenuCRsrc *MenuCRsrcPtr;
  93. typedef MenuCRsrcPtr *MenuCRsrcHandle;
  94. typedef pascal void (*MenuDefProcPtr)(short message, MenuRef theMenu, Rect *menuRect, Point hitPt, short *whichItem);
  95. typedef pascal long (*MenuBarDefProcPtr)(short selector, short message, short parameter1, long parameter2);
  96. typedef pascal void (*MenuHookProcPtr)(void );
  97. /*
  98.         This ProcPtr uses register based parameters on the 68k and cannot
  99.         be written in or called from a high-level language without the help of
  100.         mixed mode or assembly glue.
  101.  
  102.             typedef pascal short (*MBarHookProcPtr)(Rect *menuRect);
  103.  
  104. */
  105.  
  106. #if GENERATINGCFM
  107. typedef UniversalProcPtr MenuDefUPP;
  108. typedef UniversalProcPtr MenuBarDefUPP;
  109. typedef UniversalProcPtr MenuHookUPP;
  110. typedef UniversalProcPtr MBarHookUPP;
  111. #else
  112. typedef MenuDefProcPtr MenuDefUPP;
  113. typedef MenuBarDefProcPtr MenuBarDefUPP;
  114. typedef MenuHookProcPtr MenuHookUPP;
  115. typedef Register68kProcPtr MBarHookUPP;
  116. #endif
  117.  
  118. enum {
  119.     uppMenuDefProcInfo = kPascalStackBased
  120.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  121.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(MenuRef)))
  122.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Rect *)))
  123.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Point)))
  124.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(short *))),
  125.     uppMenuBarDefProcInfo = kPascalStackBased
  126.          | RESULT_SIZE(SIZE_CODE(sizeof(long)))
  127.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  128.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  129.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short)))
  130.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))),
  131.     uppMenuHookProcInfo = kPascalStackBased,
  132.     uppMBarHookProcInfo = SPECIAL_CASE_PROCINFO(12)
  133. };
  134.  
  135. #if GENERATINGCFM
  136. #define NewMenuDefProc(userRoutine)        \
  137.         (MenuDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuDefProcInfo, GetCurrentArchitecture())
  138. #define NewMenuBarDefProc(userRoutine)        \
  139.         (MenuBarDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuBarDefProcInfo, GetCurrentArchitecture())
  140. #define NewMenuHookProc(userRoutine)        \
  141.         (MenuHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuHookProcInfo, GetCurrentArchitecture())
  142. #define NewMBarHookProc(userRoutine)        \
  143.         (MBarHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMBarHookProcInfo, GetCurrentArchitecture())
  144. #else
  145. #define NewMenuDefProc(userRoutine)        \
  146.         ((MenuDefUPP) (userRoutine))
  147. #define NewMenuBarDefProc(userRoutine)        \
  148.         ((MenuBarDefUPP) (userRoutine))
  149. #define NewMenuHookProc(userRoutine)        \
  150.         ((MenuHookUPP) (userRoutine))
  151. #define NewMBarHookProc(userRoutine)        \
  152.         ((MBarHookUPP) (userRoutine))
  153. #endif
  154.  
  155. #if GENERATINGCFM
  156. #define CallMenuDefProc(userRoutine, message, theMenu, menuRect, hitPt, whichItem)        \
  157.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMenuDefProcInfo, (message), (theMenu), (menuRect), (hitPt), (whichItem))
  158. #define CallMenuBarDefProc(userRoutine, selector, message, parameter1, parameter2)        \
  159.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMenuBarDefProcInfo, (selector), (message), (parameter1), (parameter2))
  160. #define CallMenuHookProc(userRoutine)        \
  161.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMenuHookProcInfo)
  162. #define CallMBarHookProc(userRoutine, menuRect)        \
  163.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMBarHookProcInfo, (menuRect))
  164. #else
  165. #define CallMenuDefProc(userRoutine, message, theMenu, menuRect, hitPt, whichItem)        \
  166.         (*(userRoutine))((message), (theMenu), (menuRect), (hitPt), (whichItem))
  167. #define CallMenuBarDefProc(userRoutine, selector, message, parameter1, parameter2)        \
  168.         (*(userRoutine))((selector), (message), (parameter1), (parameter2))
  169. #define CallMenuHookProc(userRoutine)        \
  170.         (*(userRoutine))()
  171. /* (*MBarHookUPP) cannot be called from a high-level language without the Mixed Mode Manager */
  172. #endif
  173. extern pascal short GetMBarHeight(void)
  174.  TWOWORDINLINE(0x3EB8, 0x0BAA);
  175.  
  176. extern pascal MenuRef NewMenu(short menuID, ConstStr255Param menuTitle)
  177.  ONEWORDINLINE(0xA931);
  178.  
  179. extern pascal MenuRef GetMenu(short resourceID)
  180.  ONEWORDINLINE(0xA9BF);
  181.  
  182. extern pascal void AppendMenu(MenuRef menu, ConstStr255Param data)
  183.  ONEWORDINLINE(0xA933);
  184.  
  185. extern pascal void InsertMenu(MenuRef theMenu, short beforeID)
  186.  ONEWORDINLINE(0xA935);
  187.  
  188. extern pascal void DeleteMenu(short menuID)
  189.  ONEWORDINLINE(0xA936);
  190.  
  191. extern pascal void AppendResMenu(MenuRef theMenu, ResType theType)
  192.  ONEWORDINLINE(0xA94D);
  193.  
  194. extern pascal void InsertMenuItem(MenuRef theMenu, ConstStr255Param itemString, short afterItem)
  195.  ONEWORDINLINE(0xA826);
  196.  
  197. extern pascal void SetMenuItemText(MenuRef theMenu, short item, ConstStr255Param itemString)
  198.  ONEWORDINLINE(0xA947);
  199.  
  200. extern pascal void GetMenuItemText(MenuRef theMenu, short item, Str255 itemString)
  201.  ONEWORDINLINE(0xA946);
  202.  
  203. extern pascal void SetItemMark(MenuRef theMenu, short item, CharParameter markChar)
  204.  ONEWORDINLINE(0xA944);
  205.  
  206. extern pascal void GetItemMark(MenuRef theMenu, short item, CharParameter *markChar)
  207.  ONEWORDINLINE(0xA943);
  208.  
  209. extern pascal void SetItemCmd(MenuRef theMenu, short item, CharParameter cmdChar)
  210.  ONEWORDINLINE(0xA84F);
  211.  
  212. extern pascal void GetItemCmd(MenuRef theMenu, short item, CharParameter *cmdChar)
  213.  ONEWORDINLINE(0xA84E);
  214.  
  215. extern pascal void SetItemIcon(MenuRef theMenu, short item, short iconIndex)
  216.  ONEWORDINLINE(0xA940);
  217.  
  218. extern pascal void GetItemIcon(MenuRef theMenu, short item, short *iconIndex)
  219.  ONEWORDINLINE(0xA93F);
  220.  
  221. extern pascal void SetItemStyle(MenuRef theMenu, short item, StyleParameter chStyle)
  222.  ONEWORDINLINE(0xA942);
  223.  
  224. extern pascal void GetItemStyle(MenuRef theMenu, short item, Style *chStyle);
  225.  
  226. extern pascal MenuRef GetMenuHandle(short menuID)
  227.  ONEWORDINLINE(0xA949);
  228.  
  229. extern pascal void CalcMenuSize(MenuRef theMenu)
  230.  ONEWORDINLINE(0xA948);
  231.  
  232. extern pascal void DisableItem(MenuRef theMenu, short item)
  233.  ONEWORDINLINE(0xA93A);
  234.  
  235. extern pascal void EnableItem(MenuRef theMenu, short item)
  236.  ONEWORDINLINE(0xA939);
  237.  
  238. extern pascal void FlashMenuBar(short menuID)
  239.  ONEWORDINLINE(0xA94C);
  240.  
  241. extern pascal long PopUpMenuSelect(MenuRef menu, short top, short left, short popUpItem)
  242.  ONEWORDINLINE(0xA80B);
  243.  
  244. extern pascal void DeleteMCEntries(short menuID, short menuItem)
  245.  ONEWORDINLINE(0xAA60);
  246.  
  247. extern pascal MCTableHandle GetMCInfo(void )
  248.  ONEWORDINLINE(0xAA61);
  249.  
  250. extern pascal void SetMCInfo(MCTableHandle menuCTbl)
  251.  ONEWORDINLINE(0xAA62);
  252.  
  253. extern pascal void DisposeMCInfo(MCTableHandle menuCTbl)
  254.  ONEWORDINLINE(0xAA63);
  255.  
  256. extern pascal MCEntryPtr GetMCEntry(short menuID, short menuItem)
  257.  ONEWORDINLINE(0xAA64);
  258.  
  259. extern pascal void SetMCEntries(short numEntries, MCTablePtr menuCEntries)
  260.  ONEWORDINLINE(0xAA65);
  261.  
  262. extern pascal void DrawMenuBar(void )
  263.  ONEWORDINLINE(0xA937);
  264.  
  265. extern pascal void InvalMenuBar(void )
  266.  ONEWORDINLINE(0xA81D);
  267.  
  268. extern pascal void InitProcMenu(short resID)
  269.  ONEWORDINLINE(0xA808);
  270.  
  271. extern pascal Handle GetMenuBar(void )
  272.  ONEWORDINLINE(0xA93B);
  273.  
  274. extern pascal void SetMenuBar(Handle menuList)
  275.  ONEWORDINLINE(0xA93C);
  276.  
  277. extern pascal Boolean SystemEdit(short editCmd)
  278.  ONEWORDINLINE(0xA9C2);
  279.  
  280. extern pascal void SystemMenu(long menuResult)
  281.  ONEWORDINLINE(0xA9B5);
  282.  
  283. extern pascal Handle GetNewMBar(short menuBarID)
  284.  ONEWORDINLINE(0xA9C0);
  285.  
  286. extern pascal void ClearMenuBar(void )
  287.  ONEWORDINLINE(0xA934);
  288.  
  289. extern pascal void CheckItem(MenuRef theMenu, short item, Boolean checked)
  290.  ONEWORDINLINE(0xA945);
  291.  
  292. extern pascal short CountMItems(MenuRef theMenu)
  293.  ONEWORDINLINE(0xA950);
  294.  
  295. extern pascal void SetMenuFlash(short count)
  296.  ONEWORDINLINE(0xA94A);
  297.  
  298. extern pascal void InitMenus(void )
  299.  ONEWORDINLINE(0xA930);
  300.  
  301. #if CGLUESUPPORTED
  302. extern MenuRef newmenu(short menuID, const char *menuTitle);
  303.  
  304. extern void appendmenu(MenuRef menu, const char *data);
  305.  
  306. extern void insertmenuitem(MenuRef theMenu, const char *itemString, short afterItem);
  307.  
  308. extern long menuselect(const Point *startPt);
  309.  
  310. extern void setmenuitemtext(MenuRef menu, short item, const char *itemString);
  311.  
  312. extern void getmenuitemtext(MenuRef menu, short item, char *itemString);
  313.  
  314. #endif
  315. #if OLDROUTINENAMES
  316. #define AddResMenu(theMenu, theType) AppendResMenu(theMenu, theType)
  317. #define InsMenuItem(theMenu, itemString, afterItem)    InsertMenuItem(theMenu, itemString, afterItem)
  318. #define DelMenuItem( theMenu, item ) DeleteMenuItem( theMenu, item )
  319. #define SetItem(theMenu, item, itemString) SetMenuItemText(theMenu, item, itemString)
  320. #define GetItem(theMenu, item, itemString) GetMenuItemText(theMenu, item, itemString)
  321. #define GetMHandle(menuID) GetMenuHandle(menuID)
  322. #define DelMCEntries(menuID, menuItem) DeleteMCEntries(menuID, menuItem)
  323. #define DispMCInfo(menuCTbl) DisposeMCInfo(menuCTbl)
  324. #if CGLUESUPPORTED
  325. #define addresmenu(menu, data) appendresmenu(menu, data)
  326. #define getitem(menu, item, itemString) getmenuitemtext(menu, item, itemString)
  327. #define setitem(menu, item, itemString) setmenuitemtext(menu, item, itemString)
  328. #define insmenuitem(theMenu, itemString, afterItem)    insertmenuitem(theMenu, itemString, afterItem)
  329. #endif    /* CGLUESUPPORTED */
  330. #endif
  331. extern pascal long MenuKey(CharParameter ch)
  332.  ONEWORDINLINE(0xA93E);
  333.  
  334. extern pascal long MenuSelect(Point startPt)
  335.  ONEWORDINLINE(0xA93D);
  336.  
  337. extern pascal long MenuChoice(void )
  338.  ONEWORDINLINE(0xAA66);
  339.  
  340. extern pascal void DisposeMenu(MenuRef theMenu)
  341.  ONEWORDINLINE(0xA932);
  342.  
  343. extern pascal void DeleteMenuItem(MenuRef theMenu, short item)
  344.  ONEWORDINLINE(0xA952);
  345.  
  346. extern pascal void HiliteMenu(short menuID)
  347.  ONEWORDINLINE(0xA938);
  348.  
  349. extern pascal void InsertResMenu(MenuRef theMenu, ResType theType, short afterItem)
  350.  ONEWORDINLINE(0xA951);
  351.  
  352. extern pascal void InsertFontResMenu(MenuRef theMenu, short afterItem, short scriptFilter)
  353.  THREEWORDINLINE(0x303C, 0x0400, 0xA825);
  354.  
  355. extern pascal void InsertIntlResMenu(MenuRef theMenu, ResType theType, short afterItem, short scriptFilter)
  356.  THREEWORDINLINE(0x303C, 0x0601, 0xA825);
  357.  
  358. #endif
  359.  
  360. #if PRAGMA_ALIGN_SUPPORTED
  361. #pragma options align=reset
  362. #endif
  363.  
  364. #if PRAGMA_IMPORT_SUPPORTED
  365. #pragma import off
  366. #endif
  367.  
  368. #ifdef __cplusplus
  369. }
  370. #endif
  371.  
  372. #endif /* __MENUS__ */
  373.  
  374.